// SmartInput 日志控制系统
// 统一管理插件的日志输出，支持不同级别的日志和开关控制

class SmartInputLogger {
  constructor() {
    // 日志级别定义
    this.LEVELS = {
      ERROR: 0,    // 错误
      WARN: 1,     // 警告
      INFO: 2,     // 信息
      DEBUG: 3,    // 调试
      VERBOSE: 4   // 详细
    };
    
    // 默认日志级别
    this.currentLevel = this.LEVELS.INFO;
    
    // 日志开关
    this.enabled = true;
    
    // 日志前缀
    this.prefix = '[SmartInput]';
    
    // 初始化日志级别
    this.initLogLevel();
  }
  
  // 初始化日志级别
  initLogLevel() {
    try {
      // 从localStorage读取日志级别设置
      const savedLevel = localStorage.getItem('smartinput_log_level');
      if (savedLevel !== null) {
        this.currentLevel = parseInt(savedLevel);
      }
      
      // 从URL参数读取日志级别（开发调试用）
      const urlParams = new URLSearchParams(window.location.search);
      const urlLogLevel = urlParams.get('smartinput_log');
      if (urlLogLevel) {
        this.currentLevel = parseInt(urlLogLevel);
        localStorage.setItem('smartinput_log_level', this.currentLevel.toString());
      }
    } catch (error) {
      // 如果读取失败，使用默认级别
      this.currentLevel = this.LEVELS.INFO;
    }
  }
  
  // 设置日志级别
  setLevel(level) {
    if (this.LEVELS.hasOwnProperty(level) || typeof level === 'number') {
      this.currentLevel = typeof level === 'string' ? this.LEVELS[level] : level;
      localStorage.setItem('smartinput_log_level', this.currentLevel.toString());
      this.info(`日志级别已设置为: ${this.getLevelName(this.currentLevel)}`);
    }
  }
  
  // 获取日志级别名称
  getLevelName(level) {
    for (const [name, value] of Object.entries(this.LEVELS)) {
      if (value === level) return name;
    }
    return 'UNKNOWN';
  }
  
  // 启用/禁用日志
  setEnabled(enabled) {
    this.enabled = enabled;
    localStorage.setItem('smartinput_log_enabled', enabled.toString());
    this.info(`日志已${enabled ? '启用' : '禁用'}`);
  }
  
  // 检查是否应该输出日志
  shouldLog(level) {
    return this.enabled && level <= this.currentLevel;
  }
  
  // 格式化日志消息
  formatMessage(level, message, ...args) {
    const timestamp = new Date().toLocaleTimeString();
    const levelName = this.getLevelName(level);
    const prefix = `${this.prefix}[${levelName}][${timestamp}]`;
    
    if (args.length > 0) {
      return [prefix, message, ...args];
    } else {
      return [prefix, message];
    }
  }
  
  // 错误日志
  error(message, ...args) {
    if (this.shouldLog(this.LEVELS.ERROR)) {
      console.error(...this.formatMessage(this.LEVELS.ERROR, message, ...args));
    }
  }
  
  // 警告日志
  warn(message, ...args) {
    if (this.shouldLog(this.LEVELS.WARN)) {
      console.warn(...this.formatMessage(this.LEVELS.WARN, message, ...args));
    }
  }
  
  // 信息日志
  info(message, ...args) {
    if (this.shouldLog(this.LEVELS.INFO)) {
      console.log(...this.formatMessage(this.LEVELS.INFO, message, ...args));
    }
  }
  
  // 调试日志
  debug(message, ...args) {
    if (this.shouldLog(this.LEVELS.DEBUG)) {
      console.log(...this.formatMessage(this.LEVELS.DEBUG, message, ...args));
    }
  }
  
  // 详细日志
  verbose(message, ...args) {
    if (this.shouldLog(this.LEVELS.VERBOSE)) {
      console.log(...this.formatMessage(this.LEVELS.VERBOSE, message, ...args));
    }
  }
  
  // 成功日志（特殊类型）
  success(message, ...args) {
    if (this.shouldLog(this.LEVELS.INFO)) {
      console.log('✅', ...this.formatMessage(this.LEVELS.INFO, message, ...args));
    }
  }
  
  // 失败日志（特殊类型）
  failure(message, ...args) {
    if (this.shouldLog(this.LEVELS.ERROR)) {
      console.error('❌', ...this.formatMessage(this.LEVELS.ERROR, message, ...args));
    }
  }
  
  // 分组日志
  group(label) {
    if (this.enabled) {
      console.group(`${this.prefix} ${label}`);
    }
  }
  
  groupEnd() {
    if (this.enabled) {
      console.groupEnd();
    }
  }
  
  // 表格日志
  table(data) {
    if (this.shouldLog(this.LEVELS.DEBUG)) {
      console.table(data);
    }
  }
  
  // 获取当前日志状态
  getStatus() {
    return {
      enabled: this.enabled,
      level: this.currentLevel,
      levelName: this.getLevelName(this.currentLevel),
      prefix: this.prefix
    };
  }
  
  // 显示日志状态
  showStatus() {
    const status = this.getStatus();
    this.info('日志系统状态:', status);
  }
  
  // 清空控制台
  clear() {
    if (this.enabled) {
      console.clear();
      this.info('控制台已清空');
    }
  }
}

// 创建全局日志实例
const logger = new SmartInputLogger();

// 导出日志实例
if (typeof module !== 'undefined' && module.exports) {
  module.exports = logger;
} else if (typeof window !== 'undefined') {
  window.SmartInputLogger = logger;
}
